/* { dg-do run } */
/* { dg-shouldfail "asan" } */
/* { dg-skip-if "" { *-*-* }  { "*" } { "-O0" } } */

#include <stdlib.h>

typedef __SIZE_TYPE__ size_t;
inline void * operator new (size_t, void *p) { return p; }


struct vec
{
  int size;
};

struct vnull
{
  operator vec() { return vec(); }
};
vnull vNULL;

struct A
{
  A(): value2 (vNULL), value3 (vNULL) {}
  int value;
  vec value2;
  vec value3;
};

int main()
{
  int *array = (int *)malloc (sizeof (int) * 1);
  A *a = new (array) A ();
  free (array);
}

/* { dg-output "ERROR: AddressSanitizer: heap-buffer-overflow.*(\n|\r\n|\r)" } */
/* { dg-output "    #0 0x\[0-9a-f\]+ +in (A::A\\\(\\\)|vnull::operator vec\\\(\\\).*(\n|\r\n|\r)" } */
/* { dg-output "    #1 0x\[0-9a-f\]+ +in A::A\\\(\\\))" } */
